package com.kexio.user.mapper;

import java.time.LocalDateTime;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kexio.user.entity.Tenant;

/**
 * 租户信息Mapper接口
 */
@Mapper
public interface TenantMapper extends BaseMapper<Tenant> {
	/**
	 * 根据租户ID查询租户数量（检查是否存在）
	 */
	int countByTenantId(@Param("tenantId") String tenantId);

	/**
	 * 根据租户ID查询租户状态
	 */
	Integer selectStatusByTenantId(@Param("tenantId") String tenantId);

	/**
	 * 根据租户ID查询完整租户信息
	 */
	Tenant selectByTenantId(@Param("tenantId") String tenantId);

	/**
	 * 查询租户下的用户总数
	 */
	int countUsersByTenantId(@Param("tenantId") String tenantId);

	/**
	 * 检查租户名称是否已存在
	 */
	int countByTenantName(@Param("tenantName") String tenantName, @Param("excludeTenantId") String excludeTenantId);

	/**
	 * 查询所有活跃租户（状态为1且未删除）
	 */
	List<Tenant> selectActiveTenants();

	/**
	 * 查询即将过期的租户数量
	 */
	long countExpiringTenants(@Param("expireTime") LocalDateTime expireTime);

	/**
	 * 统计租户总数（未删除）
	 */
	long countTotalTenants();

	/**
	 * 统计活跃租户数（状态为1且未删除）
	 */
	long countActiveTenants();

	/**
	 * 更新租户状态
	 */
	int updateTenantStatus(@Param("tenantId") String tenantId,
						  @Param("status") Integer status,
						  @Param("updateBy") String updateBy,
						  @Param("updateTime") LocalDateTime updateTime);

	/**
	 * 软删除租户
	 */
	int softDeleteTenant(@Param("tenantId") String tenantId,
					  @Param("updateBy") String updateBy,
					  @Param("updateTime") LocalDateTime updateTime);
}
